2480 INPUT WH(BB,0): PRINT CHR$(4)"CLOSE": POKE 216,0: IF IQ THEN GOSUB 580
2490 GOTO 2400
2500 IF Q(9) >0 THEN CALL G(0)
2510 PRINT H$(C1)" FOR ALL": PRINT "SURNAMES SOUNDING LIKE";: INPUT ":";NL$: IF NL$ = "" THEN RETURN
2520 A$ = NL$: GOSUB 2700:NF$ = B$
2530 GOSUB 850: PRINT H$(C1)" FOR ALL": PRINT "SURNAMES SOUNDING LIKE "NL$: PRINT : POKE 34,3
2540 LO = 0: GOSUB 1540
2550 Z = 1: FOR XY = 1 TO Q(8): IF WH(XY,0) <0 THEN 2650
2560 W = WH(XY,0) +1: GOSUB 2400: GOSUB 3500: FOR X = WH(BB,0) +1 TO WH(BB,0) +G(2) STEP Q(36): GOSUB 3550
2570 FOR Y = PA +1 TO PA +Q(36): INPUT NE$(Z):W = Z: GOSUB 100:A$ = N2$: GOSUB 2700: IF B$ = NF$ THEN 2620
2580 IF OP(8) THEN IF N3$ < >"" THEN A$ = N3$: GOSUB 2700: IF B$ = NF$ THEN 2620
2590 IF OP(13) THEN IF N4$ < >"" THEN A$ = N4$: GOSUB 2700: IF B$ = NF$ THEN 2620
2600 GOTO 2630
2620 SV(Z) = Y: GOSUB 800:Z = Z +1: IF Z = SZ THEN X = Q(28):Y = X:XY = Q(8)
2630 GOSUB 640: NEXT : NEXT : PRINT CHR$(4)"CLOSE"
2650 NEXT XY:LO = Z -1: POKE 34,0: IF ES OR LO = 0 THEN RETURN
2660 ON C1 GOSUB 9510,5500: RETURN
2700 LA = LEN(A$):B$ = "":: IF LA = 0 THEN RETURN
2710 LB = 0: FOR I = 1 TO LA:A = ASC( MID$ (A$,I,1)): GOSUB 2850: IF A = 0 THEN 2800
2712 LC = SN(A): IF NOT AL(A) THEN 2720
2714 CP$ = CHR$(A +64): FOR J = 1 TO AL: IF CP$ < > LEFT$(CD$(J),1) THEN 2719
2715 IF LA -I <CD(J,1) THEN 2719
2716 M = 1: FOR K = 2 TO CD(J,1):A = ASC( MID$ (A$,I +K -1,1)): GOSUB 2850: IF A = 0 THEN K = 9:M = 0: GOTO 2718
2717 IF CHR$(A +64) < > MID$ (CD$(J),K,1) THEN M = 0
2718 NEXT : IF M THEN LC = CD(J,2):J = AL:I = I +CD(J,1) -1
2719 NEXT
2720 IF I = 1 THEN 2740
2725 IF LC = 0 THEN 2800
2730 IF LB >0 THEN IF ASC( MID$ (B$,LB,1)) = LC +48 THEN 2800
2740 B$ = B$ + CHR$(LC +48):LB = LB +1: GOTO 2800
2800 NEXT : IF LEN(B$) >4 THEN B$ = LEFT$(B$,4)
2810 RETURN
2850 IF A >64 AND A <91 THEN A = A -64: RETURN
2860 IF A >96 AND A <123 THEN A = A -96: RETURN
2870 A = 0: RETURN
2900 POKE 216,0: CALL G(8): PRINT : PRINT "THAT WAS NOT A DATA DISKETTE.": PRINT "PLEASE TRY AGAIN...";: GOSUB 690: PRINT CHR$(4)"OPEN CONTROLS": PRINT CHR$(4)"READ CONTROLS": RESUME
3000 IF Q(8) = 1 THEN BB = 1: GOTO 3015
3002 BB = 0:A = 0: FOR I = 1 TO Q(8): IF WH(I,0) > -1 THEN BB = I:A = A +1
3003 NEXT : IF A = 1 THEN 3020
3005 PRINT : PRINT "WHICH DRIVE (1-"Q(8)")?";: GOSUB 690: IF YN$ = CHR$(13) THEN RETURN
3010 BB = VAL(YN$): IF BB <1 OR BB >Q(8) THEN 3005
3015 IF WH(BB,0) > -1 THEN 3020
3016 IF Q(8) = 1 THEN RETURN
3017 PRINT "THE DRIVE DOESN'T HAVE A DATA DISKETTE": GOTO 3005
3020 Z = 0: GOSUB 3500: FOR X = WH(BB,0) +1 TO WH(BB,0) +G(2) STEP Q(36): GOSUB 3550: FOR Y = PA +1 TO PA +Q(36):Z = Z +1:SV(Z) = Y: INPUT NE$(Z): GOSUB 800: IF Z >SZ -2 THEN Y = Q(28):X = Y: PRINT Z" NAMES STORED": FOR I = 1 TO 2000: NEXT
3030 NEXT : GOSUB 640: NEXT : PRINT CHR$(4)"CLOSE":LO = Z: IF ES OR LO = 0 THEN RETURN
4505 A$ = "LOADED FROM": IF C2 = 2 THEN A$ = "READ FROM"
4506 IF C2 = 4 THEN A$ = "SAVED TO"
4508 IF Q(8) = 1 THEN DR = 1: GOTO 4550
4510 PRINT : PRINT "WHICH DRIVE IS THE LIST TO BE": PRINT A$" (1-"Q(8)")?";: GOSUB 690: IF YN$ = CHR$(13) THEN RETURN
4520 DR = VAL(YN$): IF DR <1 OR DR >Q(8) THEN 4510
4550 GOSUB 4800: IF CP$ = CZ$ THEN RETURN
4560 ON C2 -1 GOSUB 1800,4600,2100: RETURN
4600 ONERR GOTO 4700
4610 GOSUB 4850
4620 INPUT LO: IF LO >SZ THEN PRINT "LIST TOO BIG FOR MEMORY. ONLY "SZ" OUT": PRINT "OF "LO" NAMES WILL BE STORED.":LO = SZ
4630 INPUT FL: FOR I = 1 TO LO: INPUT SV(I): INPUT NE$(I): IF I = 10 * INT(I/10) THEN IF PEEK( -16384) = ASC(CZ$) +128 THEN I = LO:ES = 1: POKE -16368,0
8110 PRINT "DO YOU WANT TO:": PRINT : FOR I = 1 TO H2: PRINT I") "H2$(I): NEXT
8120 PRINT : INVERSE : PRINT "CHOICE (1-"H2",P)?";: GOSUB 690: IF YN$ = CHR$(13) THEN RETURN
8125 IF YN$ = "P" THEN GOSUB 1600: GOTO 8100
8130 C2 = VAL(YN$): IF C2 <1 OR C2 >H2 THEN 8120
8160 ES = 0: ON C2 GOSUB 4000,4500,4500,4500,9300,8200,5000: GOTO 8100
8200 IF FL = 0 THEN GOSUB 5500: RETURN
8210 IF OP(3) THEN GOSUB 6400
8220 GOSUB 9950: RETURN
9000 DATA 6
9020 DATA MAKE ALPHABETIC LIST,MAKE NUMERIC ORDER LIST,MAKE SPECIAL LIST,CHANGE PROGRAM PARAMETERS,CHECK DISKETTES,"EXIT PROGRAM"
9040 DATA 5
9060 DATA NUMBER RANGE,NUMBER LIST,NAME SET,SURNAME SOUNDEX,WHOLE DISKETTE
9090 DATA 7
9095 DATA MERGE ALPHABETIC LISTS,SHOW LIST FROM DISKETTE,PUT DISKETTE LIST INTO MEMORY,SAVE LIST TO DISKETTE,ALPHABETIZE MEMORY LIST,REPEAT A LIST,LIST EMPTY SLOTS
9100 DATA 16
9101 DATA TOP-OF-FORM AFTER PRINTS
9102 DATA SIZE OF LEFT MARGIN
9103 DATA ASK FOR HEADER
9104 DATA TAB BEFORE HEADER
9105 DATA OUTPUT TO PRINTER
9106 DATA SAVE LIST ON DISKETTE
9107 DATA USE MAIDEN NAME
9108 DATA USE MARRIED NAME
9109 DATA SHOW EMPTY NAME SLOTS
9110 DATA SHOW LAST NAME FIRST
9111 DATA SCREEN SPEED (1-100%)
9112 DATA ABLE TO ABORT ALPHA
9113 DATA SEARCH TITLE WITH SOUNDEX
9114 DATA IGNORE UPPER/LOWER CASE
9115 DATA NAMES PER GROUP
9116 DATA LINES PER PAGE
9200 DATA 0,1,2,3,0,1,2,0,0,0,2,4,5,5,0,1,2,6,2,3,0,1,0,2,0,2
9210 DATA 0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0
9220 DATA 9
9230 DATA 2,1,TH,2,5,NG,3,2,TIO,2,2,DG,3,0,IGH,3,3,GHT,2,1,GH,2,6,WR,2,5,GN
9300 IF FL = 0 THEN LA = OP(5):OP(5) = 0: GOSUB 9510:OP(5) = LA: RETURN
9310 PRINT "LIST IN MEMORY IS ALREADY ALPHABETIC.": FOR I = 1 TO 2000: NEXT : RETURN
9510 GOSUB 850: IF LO = 0 THEN PRINT "NOTHING IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN
9515 FL = 1: GOSUB 850: IF OP(3) AND OP(5) THEN GOSUB 6400
9518 GOSUB 7100: PRINT "INITIALIZING ARRAYS"
9520 I = 1:II = LO: FOR J = 1 TO LO:NB(J) = J: NEXT : IF NOT OP(9) THEN II = LO: GOTO 9580
9530 IF LEN(NE$(NB(I))) >3 THEN 9560
9540 GOSUB 400:II = II -1: IF I > = II THEN 9570
9550 GOTO 9530
9560 I = I +1: IF I <II THEN 9530
9570 IF LEN(NE$(NB(II))) <4 THEN II = II -1
9580 NB = II: IF NB <2 THEN GOSUB 9950: RETURN
9590 GOSUB 850: INVERSE : PRINT "ALPHABETIZING NAMELIST.": NORMAL
9600 DR = INT(.003 *NB ^1.5)/10
9610 PRINT : PRINT "THIS MAY TAKE ";DR;" MINUTES TO FINISH"
9620 VTAB 17: PRINT "'ID' IS ONE LESS THAN A POWER OF 2 AND " CHR$((Q(43) = 0) *13)"DECREMENTS. PROCESSING IS DONE WHEN IT": PRINT "IS FINISHED WITH ID=1. ID=1 USES " CHR$((Q(43) = 0) *13)"ABOUT 1/3 OF THE TOTAL TIME."
9630 GOSUB 410: RETURN
9950 GOSUB 850: IF C2 = 5 THEN RETURN
9952 IF LO = 0 THEN PRINT "NOTHING IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN
9955 GOSUB 5600:X2 = 0:X7 = 0: IF NOT OP(5) THEN 10010
9960 INVERSE : PRINT "PLEASE READY THE PRINTER": NORMAL : GOSUB 580:IQ = 1
16180 FOR X = 1 TO H1: PRINT X") "H1$(X): NEXT : PRINT
16200 INVERSE : PRINT "CHOICE (1-"H1",P)?";: GOSUB 690: IF YN$ = CHR$(13) THEN RETURN
16202 IF YN$ = "P" THEN GOSUB 1600: GOSUB 850: GOTO 16170
16205 C3 = VAL(YN$): IF C3 <1 OR C3 >H1 THEN 16200
16210 PRINT : ON C3 GOSUB 1000,740,1260,2500,3000
16260 RETURN
16500 ONERR GOTO 16700
16505 DIM Q(44),Q$(22),OP(17),OP$(17),G(10):G(8) = PEEK(115) +256 * PEEK(116) +1
16510 PRINT CHR$(4)"OPEN CONFIGURATION": PRINT CHR$(4)"READ CONFIGURATION": FOR I = 1 TO 44: INPUT Q(I): NEXT
16512 FOR I = 1 TO 4: INPUT A: NEXT : DIM WH(6,3): FOR I = 1 TO 6: FOR J = 2 TO 3: INPUT WH(I,J): NEXT : NEXT : FOR I = 1 TO 4: INPUT A: NEXT
16515 IF Q(43) THEN Q(9) = 0
16520 FOR I = 1 TO 22
16522 J = 0: GET A$: IF A$ = CHR$(127) THEN A$ = CHR$(0)
16523 IF A$ = CHR$(126) THEN A$ = CHR$(13):J = 1
16525 IF A$ < > CHR$(13) OR J = 1 THEN Q$(I) = Q$(I) +A$: GOTO 16522
16530 NEXT : FOR I = 1 TO 18: INPUT A$: NEXT : FOR I = 1 TO 17: INPUT A: NEXT
16535 INPUT OP(1): INPUT OP(2): FOR I = 1 TO 9: INPUT A: NEXT : INPUT OP(3): FOR I = 1 TO 7: INPUT A: NEXT : FOR I = 4 TO 13: INPUT OP(I): NEXT : INPUT OP(15): INPUT A: INPUT OP(14): FOR I = 1 TO 13: INPUT OP(16): NEXT
16545 PRINT CHR$(4)"CLOSE"
16550 POKE 216,0: RETURN
16700 A = PEEK(222): CALL G(8): IF A = 5 OR A = 6 OR A = 8 THEN PRINT "NO CONFIGURATION FILE AVAILABLE ON": PRINT "DISKETTE LAST USED. PLEASE SEE MANUAL.": END
16720 PRINT "ERROR # "A". PLEASE SEE DOS MANUAL.": END
18000 FOR I = 1 TO Q(8)
18035 ONERR GOTO 18200
18040 PRINT CHR$(4)"OPEN CONTROLS,S"WH(I,2)",D"WH(I,3): PRINT CHR$(4)"READ CONTROLS": FOR J = 1 TO 7: INPUT G(J): NEXT : PRINT CHR$(4)"CLOSE"
18050 IF G(3) = Q(14) AND G(4) = Q(15) AND G(5) = Q(16) AND G(6) = Q(36) AND G(7) = Q(38) THEN 18100
18060 PRINT : PRINT "DISKETTE IN SLOT "WH(I,2)", DRIVE "A",": PRINT "DOES NOT MATCH THE CONFIGURATION FILE.": PRINT "PLEASE REFER TO MANUAL.": END
18100 WH(I,0) = G(1): NEXT : POKE 216,0: GOTO 18215
18200 POKE 216,0: CALL G(8):WH(I,0) = -1
18205 PRINT "THE DISKETTE IN DRIVE "I" IS ASSUMED": PRINT "TO BE A SCRATCH ONE.": FOR BB = 1 TO 2000: NEXT
18210 NEXT I
18215 J = 0: FOR I = 1 TO Q(8): IF WH(I,0) <0 THEN J = J +1
18220 NEXT : IF J = Q(8) THEN PRINT "NO DATA DISKETTES LOADED.": FOR BB = 1 TO 5000: NEXT